import { Not } from "typeorm";

/**
 * @desc: 新增之前，判断某个表中是否已存在某个字段的值，避免重复添加
 *       【不在表中加入索引，因为索引占用空间，且索引会降低查询效率，所以不建议使用索引】
 * @author: yanrui
 * @param entity 实体对象
 * @param keyName 字段名
 * @param keyValue 字段值
 * */
export async function checkKeyIsExist(entity: any, keyName: string, keyValue: string) {
  const isExist = await entity.findOneBy({
    [keyName]: keyValue,
  });
  if(isExist) {
    throw new Error(`已存在字段  "${keyValue}"  的记录`);
  }
}

/**
 * @desc: 修改的时候，判断是否有重复值，除去本身和其他所有数据对比
 * */
export async function checkUpdateKeyRepeat(entity: any, keyName: string, keyValue: string) {
  const allDataExceptCurrent = await entity.find({
    where: {
      [keyName]: Not(keyValue)
    },
    select: [keyName]
  });
  const isExist = allDataExceptCurrent.some(item => item[keyName] === keyValue);
  if(isExist) {
    throw new Error(`已存在字段"${keyValue}"的记录`);
  }
}
